﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Xml;
using AllegroWebAPI.Utils;

namespace AllegroWebAPI
{

    public class AllegroClient : IDisposable
    {
        #region Maintenance 

        long hashoffset = 0;
        long serverTime = 0;    //deklaracje zmiennych zwracanych przez funkcję doLogin
        private AllegroWebApiService apiSrv;

        public long Version { get; private set; }
        public AllegroWebApiService WebService { get { return apiSrv; } }
        public string WebApiKey { get; private set; }
        public int CountryId { get; private set; }// 228
        public string SessionHandle { get; private set; }


        public AllegroClient(string apiKey, int countryId)
        {
            apiSrv = new AllegroWebApiService();
            WebApiKey = apiKey;
            CountryId = countryId;
        }

        public AllegroClient(string apiKey)
            : this(apiKey, 1)
        {
        }
/*
        public AllegroClient(string apiKey, int countryId, string userLogin, string userPassword, long apiVersion)
            : this(apiKey, countryId)
        {
            Login(userLogin, userPassword, apiVersion);
        }

        public AllegroClient(string apiKey, string userLogin, string userPassword)
            : this(apiKey, 1)
        {
            Login(userLogin, userPassword);
        }
*/
        public void Dispose()
        {
            this.apiSrv.Dispose();
        }

        public void UseProxy(string Address, int Port, string userName, string password, string domain)
        {
            System.Net.NetworkCredential cr = new System.Net.NetworkCredential(userName, password, domain);
            System.Net.WebProxy pr = new System.Net.WebProxy(Address, Port);
            pr.Credentials = cr;
            apiSrv.Proxy = pr;
        }

        #endregion

        public bool Login(string userLogin, string userPassword, long apiVersion)
        {

            SessionHandle = apiSrv.doLogin(
                        userLogin,      //login został wpisany w polu tekstowym
                        userPassword,      //hasło
                        CountryId,          //parametr "countrycode", lista wartości w dokumentacji – dla Polski = 1
                        WebApiKey,          //klucz webapi - zadeklarowany wcześniej jako stała
                        apiVersion,         //klucz wersji - jw.
                        out hashoffset,     //  
                        out serverTime);    // dodatkowe wartości zwracane przez funkcję.
            return true;
        }

        public bool Login(string userLogin, string userPassword)
        {
            return Login(userLogin, userPassword, GetApiVersion());
        }

        public long GetApiVersion()
        {
            long ver = 0;
            // Komponent, którego wartość ma być pobrana (1 - usługa Allegro WebAPI, 2 - aplikacja, 3 - struktura drzewa kategorii, 4 - pola formularza sprzedaży, 5 - serwisy).
            apiSrv.doQuerySysStatus(1, CountryId, WebApiKey, out ver);
            Version = ver;
            return ver;
        }


        
        public AllegroUser GetUser(string userName)
        {
            return new AllegroUser(this, userName);
        }

        public AllegroUser GetUser(long userId)
        {
            return new AllegroUser(this, userId);
        }

    }
}
